
package com.ys.chatserver.http.file.u;

import com.ys.chatserver.BaseConf;
import com.ys.chatserver.http.file.dto.BigFileType;

/**
 * 短视频文件上传处理实现类（支持大文件断点分块上传）。
 * <p>
 * <b>目前：</b>RainbowChat中默认支持10s短视频。按照微信、易信、RainbowChat中的压缩率
 * ，10秒短视频约为1.3MB至2MB左右，对于移动弱网络来说，这也算是大文件了）。<font color="#0000ff">
 * 如果您的应用需要支持更长时间的短视频，只需放开手机端的录制时间限制即可，理论上本服务端
 * 文件上传处理类是可处理大至上G的短视频文件上传哦！</font>
 * <p>
 * <b>提示：</b>大文件上传原理，详见 {@link BigUploaderRoot}中的详细说明。
 *
 * @author Json, Jack Jiang
 * @see BigFileType
 * @since 4.4
 */
public class ShortVideoUploader extends BigUploaderRoot {
    private static final long serialVersionUID = 1L;

    /**
     * 上传的文件要保存的目录（此目录末尾要带“/”哦）。
     *
     */
    @Override
    public String getFileSaveDir() {
        return ShortVideoUploader.getShortVideoFileSaveDir();
    }

    /**
     * 支持的大文件类型
     */
    @Override
    protected int getFileType() {
        return BigFileType.FILE_TYPE_SHORT_VIDEO;
    }

    @Override
    protected String getTAG() {
        return "短视频";
    }

    /**
     * 上传的短视频文件要保存的目录（此目录末尾要带“/”哦）。
     *
     */
    public static String getShortVideoFileSaveDir() {
        return BaseConf.getInstance().getDIR_USER_SHORTVIDEO_UPLOAD();
    }

    /**
     * 短视频文件最终保存绝对路径。
     *
     */
    public static String getShortVideoFileSavePath(String fileMd5) {
        return ShortVideoUploader.getShortVideoFileSaveDir() + fileMd5;
    }

    /**
     * 返回短视频文件分块存放的临时目录。
     * <p>
     * 为了防止重复和混乱，分块文件是单独保存在形如“md5码_uid”的目录下。
     *
     */
    public static String getChunckShortVideoFileDir(String fileMd5, String userUid) {
        return ShortVideoUploader.getShortVideoFileSaveDir() + fileMd5 + (userUid != null ? "_" + userUid : "") + "/";
    }
}
